module.exports = app => {
    const express = require('express')
    // 创建路由实例
    const router = express.Router({
        mergeParams: true
    })

    // 验证权限的中间件
    const auth = require('../../middleware/auth')
    const auth_login = require('../../middleware/auth_login')
    // 引入模型中间件
    const resourceMiddleware = require('../../middleware/resourceMiddleware')

    // 添加资源
    router.post('/', auth(), async (req, res) => {
        // 往数据添加一条数据
        const model = await req.model.create(req.body)
        res.send(model)
    })
    // 获取资源列表（显示几条）
    router.get('/', auth(), async (req, res) => {
        const queryOptions = {} 
        // 如果值等于 Category 模型名字 需要单独处理
        // Category 模型中有一个'parent'的id关联字段
        if(req.model.modelName === 'Category') {
            queryOptions.populate = 'parent'
        }
        const items = await req.model.find().setOptions(queryOptions).limit(100)
        res.send(items)
    })
    // 根据动态传入的ID获取资源
    router.get('/:id', auth(), async (req, res) => {
        const model = await req.model.findById(req.params.id)
        res.send(model)
    })
    // 根据ID编辑资源
    router.put('/:id', auth(), async (req, res) => {
        const model = await req.model.findByIdAndUpdate(req.params.id, req.body)
        res.send(model)
    })
     // 根据ID删除资源
    router.delete('/:id', auth(), async (req, res) => {
        await req.model.findByIdAndDelete(req.params.id)
        res.send({
            success: true
        })
    })

    // 添加路由中间件 并设置路由前缀  '/admin/api/rest/'来开头 rest表示rest风格
    app.use('/admin/api/rest/:resource', auth(), resourceMiddleware(), router)


    // 定义一个上传文件的接口
    const multer = require('multer')
    const upload = multer({dest: __dirname + '/../../uploads'})
    app.post('/admin/api/upload', upload.single('file'), auth(), async (req, res) => {
      const file = req.file
      file.url = `http://47.110.134.172/uploads/${file.filename}`
      res.send(file)
    })

    // 登陆接口
    app.post('/admin/api/login', auth_login())

    // 错误处理必须放到路由的最后面
    app.use(async (err, req, res, next) => {
      // console.log('err===', err)
      res.status(err.statusCode || 500).send({
        message: err.message
      })
    })

}